Java JavaScript Python C# C C++ Go Kotlin PHP Swift R Ruby TypeScript Scala SQL Perl rust VisualBasic Matlab Julia

Networking → URLConnection Class

Networking

URLConnection Class

The `URLConnection` class in Java is a crucial part of the `java.net` package, providing a high-level interface for opening connections to URLs and interacting with them. It's an abstract class, meaning you don't directly instantiate it; instead, you obtain an instance through methods like `URL.openConnection()`. `URLConnection` handles the complexities of network communication, allowing you to easily send requests and receive responses from various resources on the internet (web servers, FTP servers, etc.).

URLConnection Functionality:

Opening Connections: The core function is establishing a connection to a specified URL. This involves resolving the hostname, initiating a network connection, and potentially negotiating protocols like HTTP or FTP. Setting Request Properties: Before sending a request, you can configure various properties, such as: ⮚ `setRequestProperty("User-Agent", "MyCustomUserAgent")`: Identify your application to the server. ⮚ `setRequestProperty("Content-Type", "application/json")`: Specify the type of data you're sending. ⮚ `setRequestProperty("Content-Length", String.valueOf(data.length()))`: Inform the server of the data size. ⮚ `setRequestMethod("POST")`: Define the HTTP method (GET, POST, PUT, DELETE, etc.). Sending Data (Output Stream): To send data to the server (e.g., for POST requests), you get an `OutputStream` from `URLConnection.getOutputStream()`. You then write your data to this stream. Receiving Data (Input Stream): After sending a request, you read the server's response using an `InputStream` obtained via `URLConnection.getInputStream()`. You read data from this stream until the end of the response. Handling HTTP Responses: For HTTP connections, `URLConnection` provides methods to access HTTP response codes (e.g., 200 OK, 404 Not Found), headers (e.g., `getContentLength()`, `getContentType()`), and the response body. Handling Timeouts: You can set connection and read timeouts using `setConnectTimeout()` and `setReadTimeout()` to prevent your application from hanging indefinitely.

Fetching a webpage (GET request)

This example retrieves the content of a webpage and prints it to the console:
GET request in Java URLConnection import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class WebpageFetcher { public static void main(String[] args) throws IOException { URL url = new URL("https://www.tutorialix.com"); // Replace with your desired URL URLConnection connection = url.openConnection(); connection.setConnectTimeout(5000); // 5 seconds timeout connection.setReadTimeout(5000); // 5 seconds timeout try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } } }

Sending data to a server (POST request)

This example sends JSON data to a server using a POST request:
POST request in Java URLConnection import java.io.DataOutputStream; import java.io.IOException; import java.net.URL; import java.net.URLConnection; public class PostData { public static void main(String[] args) throws IOException { URL url = new URL("https://tutorialix.com/post"); //Example POST endpoint URLConnection connection = url.openConnection(); connection.setDoOutput(true); // Indicate that we'll send data connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); String jsonData = "{\\"name\\":\\"John Doe\\",\\"age\\":30}"; try (DataOutputStream writer = new DataOutputStream(connection.getOutputStream())) { writer.writeBytes(jsonData); } System.out.println("Response Code: " + connection.getHeaderField("Status")); //Check response //Further processing of the response can be done using connection.getInputStream() } }

PUT Request Example

This example demonstrates how to send data to a specific URL using the PUT method. It assumes you have a server endpoint that accepts PUT requests and processes the data sent in the request body.
Java PUT Request Example import java.io.IOException; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; public class HttpPutExample { public static void main(String[] args) { try { URL url = new URL("https://tutorialix.com/api/resource/123"); // Replace with your actual URL HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // Set the request method to PUT connection.setRequestMethod("PUT"); // Set request headers (optional, but often required) connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setDoOutput(true); // Enable sending data in the request body // Data to be sent in the request body (e.g., JSON) String jsonData = "{"name":"Updated Resource", "value":"newValue"}"; byte[] postData = jsonData.getBytes(StandardCharsets.UTF_8); // Write the data to the output stream try (OutputStream outputStream = connection.getOutputStream()) { outputStream.write(postData); } // Get the response code int responseCode = connection.getResponseCode(); System.out.println("PUT request to URL: " + url); System.out.println("Response Code: " + responseCode); // Read the response body (optional) if (responseCode >= 200 && responseCode < 300) { java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(connection.getInputStream())); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); System.out.println("Response Body: " + response.toString()); } else { java.io.BufferedReader errorReader = new java.io.BufferedReader(new java.io.InputStreamReader(connection.getErrorStream())); String line; StringBuilder errorResponse = new StringBuilder(); while ((line = errorReader.readLine()) != null) { errorResponse.append(line); } errorReader.close(); System.out.println("Error Response Body: " + errorResponse.toString()); } connection.disconnect(); } catch (IOException e) { e.printStackTrace(); } } }
Explanation: ⮚ URL url = new URL(...): Creates a URL object for the target endpoint. ⮚ HttpURLConnection connection = (HttpURLConnection) url.openConnection(): Opens a connection to the URL and casts it to HttpURLConnection to access HTTP-specific features. ⮚ connection.setRequestMethod("PUT"): Sets the HTTP request method to PUT. ⮚ connection.setRequestProperty(...): Sets request headers, such as Content-Type to indicate the format of the data being sent and Accept to specify the expected response format. ⮚ connection.setDoOutput(true): Enables sending data in the request body. For PUT requests (which typically have a body), this is essential. ⮚ String jsonData = "...": The data you want to send to the server, often in JSON format. ⮚ byte[] postData = jsonData.getBytes(StandardCharsets.UTF_8): Converts the data string to bytes using UTF-8 encoding. ⮚ try (OutputStream outputStream = connection.getOutputStream()) { ... }: Gets the output stream of the connection and writes the data to it. The try-with-resources statement ensures the stream is closed automatically. ⮚ int responseCode = connection.getResponseCode(): Retrieves the HTTP response code from the server. ⮚ Reading the Response: The code then checks the response code and reads the response body (either the success response or the error response) if needed. ⮚ connection.disconnect(): Closes the connection to release resources.

DELETE Request Example

This example shows how to send a DELETE request to a specific URL. DELETE requests typically don't have a request body.
Java DELETE request import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; public class HttpDeleteExample { public static void main(String[] args) { try { URL url = new URL("https://tutorialix.com/api/resource/123"); // Replace with your actual URL HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // Set the request method to DELETE connection.setRequestMethod("DELETE"); // Set request headers (optional, but sometimes required, e.g., for authentication) connection.setRequestProperty("Accept", "application/json"); // Get the response code int responseCode = connection.getResponseCode(); System.out.println("DELETE request to URL: " + url); System.out.println("Response Code: " + responseCode); // Read the response body (optional) if (responseCode >= 200 && responseCode < 300) { java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(connection.getInputStream())); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); System.out.println("Response Body: " + response.toString()); } else { java.io.BufferedReader errorReader = new java.io.BufferedReader(new java.io.InputStreamReader(connection.getErrorStream())); String line; StringBuilder errorResponse = new StringBuilder(); while ((line = errorReader.readLine()) != null) { errorResponse.append(line); } errorReader.close(); System.out.println("Error Response Body: " + errorResponse.toString()); } connection.disconnect(); } catch (IOException e) { e.printStackTrace(); } } }
Explanation: ⮚ URL url = new URL(...): Creates a URL object for the resource to be deleted. ⮚ HttpURLConnection connection = (HttpURLConnection) url.openConnection(): Opens a connection. ⮚ connection.setRequestMethod("DELETE"): Sets the HTTP request method to DELETE. ⮚ connection.setRequestProperty(...): Sets optional request headers, such as Accept. ⮚ int responseCode = connection.getResponseCode(): Retrieves the HTTP response code. ⮚ Reading the Response: Similar to the PUT example, this part reads the response body if needed. ⮚ connection.disconnect(): Closes the connection. Important Considerations: Error Handling: Always wrap network operations in `try-catch` blocks to handle potential exceptions like `IOException`, `MalformedURLException`, etc. Security: Be mindful of security implications when interacting with external resources. Avoid sending sensitive data without proper encryption (HTTPS). HTTP Status Codes: Check the HTTP response code (e.g., using `connection.getResponseCode()`) to determine if the request was successful. Handle errors appropriately. Resource Management: Always close input and output streams using `try-with-resources` to prevent resource leaks.

Tutorials